#include <REGX52.H>
#include "Delay.h"

//存储要显示的数字
//NixieBuff[1]就是从左到右第1个数码管要显示数字
//10 对应 NixieTubeNums[10] 什么都不显示
//11 对应 NixieTubeNums[11]	显示中间横线
unsigned char NixieBuff[9] = {0, 10, 10, 10, 10, 10, 10, 10, 10};
/**
  * @brief		设置i数码管显示Num数字
  * @parm		i:从左往右第i个数码管，范围：1~8
  * @parm		Num:从左往右第i个数码管，范围：0~9
  * @retval		无
  */
void Nixie_SetBuff(unsigned char i, unsigned char Num)
{
	NixieBuff[i] = Num;
}

//指定的数字有哪些地方要亮，对应数值的数组
//0x00为什么都不显，0x40显示中间横线
unsigned char NixieTubeNums[] = {0x3F, 0x06, 0x5B, 0x4F,0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x00, 0x40};
/**
  * @brief 显示指定位置指定数字
  * @parm 第一个参数是从左往右要显示的位置 范围: 1~8
  * @parm 第二个参数是要显示的数字 范围: 0~9
  * @retval 无
  */
void Nixie_Scan(unsigned char location, unsigned char num)
{
	P0 = 0x00;//消影
	//第一个位置是LED8，对应38译码器111
	switch(location)
	{
		case 1:P2_4 = 1;P2_3 = 1;P2_2 = 1;break;
		case 2:P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
		case 3:P2_4 = 1;P2_3 = 0;P2_2 = 1;break;
		case 4:P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
		case 5:P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
		case 6:P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
		case 7:P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
		case 8:P2_4 = 0;P2_3 = 0;P2_2 = 0;break;
	}
	//指定的数字有哪些地方要亮
	P0 = NixieTubeNums[num];
}
/**
  * @brief		定时器中断调用，每2ms扫描一次数码管，在i位置显示Nixie[i]
  * @parm		无
  * @retval		无
  */
void Nixie_Looper()
{
	static unsigned char i;
	Nixie_Scan(i, NixieBuff[i]);
	i++;
	if(i >= 9)	i = 0;
}